package com.ftw.commons.widgets.toast

import android.annotation.SuppressLint
import android.content.Context
import android.text.TextUtils
import android.view.Gravity
import android.view.LayoutInflater
import android.widget.TextView
import android.widget.Toast
import androidx.core.content.ContextCompat
import com.ftw.commons.R
import com.ftw.commons.utils.ShapeUtils

/**
 * 描    述：
 * 作    者：fantianwen
 * 时    间：2019-07-25  11:30
 */

@SuppressLint("StaticFieldLeak")
object ToastUtils {

    private var mToast: Toast? = null
    private var mContent: TextView? = null

    enum class Type {
        ERROR,
        NORMAL,
        WARNING
    }

    /**
     * @name：显示错误toast
     * @desc: 显示错误toast
     * @input: context(上下文),msg（消息）
     * @return:
     **/
    fun showError(context: Context, msg: String) {
        if (!TextUtils.isEmpty(msg)) {
            cancelToast()
            show(context, msg, Type.ERROR)
        }
    }


    /**
     * @name：显示正确toast
     * @desc: 显示正确toast
     * @input: context(上下文),msg（消息）
     * @return:
     **/
    fun showNormal(context: Context, msg: String) {
        cancelToast()
        show(context, msg, Type.NORMAL)
    }

    /**
     * @name：显示警告toast
     * @desc: 显示警告toast
     * @input: context(上下文),msg（消息）
     * @return:
     **/
    fun showWarning(context: Context, msg: String) {
        cancelToast()
        show(context, msg, Type.WARNING)
    }

    /**
     * @name：显示toast
     * @desc: 显示toast
     * @input:  context(上下文),msg（消息）type类型
     * @return:
     **/
    @SuppressLint("InflateParams")
    private fun show(context: Context, msg: String, type: Type) {

        if (mToast == null) {
            mToast = Toast(context)
            val view = LayoutInflater.from(context).inflate(R.layout.toast_layout, null)
            //获取TextView
            mContent = view.findViewById(R.id.toast_tv) as TextView
            //mToast，水平居中并在底部，X轴偏移0个单位，Y轴偏移70个单位，
            mToast!!.setGravity(Gravity.CENTER_HORIZONTAL or Gravity.BOTTOM, 0, 70)
            //设置显示时间
            mToast!!.duration = Toast.LENGTH_LONG
            when (type) {
                Type.NORMAL -> ShapeUtils.setShapeColorAndRadius(
                    view!!,
                    ContextCompat.getColor(context, R.color.c_88000000),
                    55f
                )

                Type.ERROR -> {
                    ShapeUtils.setShapeColorAndRadius(
                        view!!,
                        ContextCompat.getColor(context, R.color.c_88000000),
                        55f
                    )
                }

                Type.WARNING -> ShapeUtils.setShapeColorAndRadius(
                    view!!,
                    ContextCompat.getColor(context, R.color.c_88000000),
                    55f
                )
            }

            mToast!!.view = view
        }
        //设置显示的内容
        mContent!!.text = msg

        mToast!!.show()
    }

    private fun cancelToast() {
        if (mToast != null) {
            mToast!!.cancel()
            mToast = null
        }
    }

}